// 导入自定义的微信请求模块
import wxRequest from './config'
// 导入存储相关工具函数
import { getStorage, clearStorage } from '@/utils/storage'
// 导入微信API封装工具
import { modal, toast } from '@/utils/wx-api/index.js' // 添加 toast 导入

/**
 * 创建请求实例
 * 配置基础URL、超时时间和是否显示加载状态
 */
const request = new wxRequest({
  baseUrl: 'https://v2.xxapi.cn/',
  timeout: 4000,
  isLoading: false
})

/**
 * 请求拦截器
 * 在发送请求前自动添加token到请求头
 * @param {Object} config 请求配置
 * @returns {Object} 修改后的配置
 */
request.interceptors.request = (config) => {
  const token = getStorage('token')
  if (token) {
    config.header['token'] = token
  }
  return config
}

/**
 * 响应拦截器
 * 处理不同响应状态码的情况，统一错误处理
 * @param {Object} response 响应对象
 * @returns {Object|Promise} 处理后的响应或拒绝的Promise
 */
request.interceptors.response = async (response) => {
  const { isSuccess, data } = response
  // 处理网络请求失败的情况
  if (!isSuccess) {
    wx.showToast({
      title: '网络异常，请稍后再试',
      icon: 'error'
    })
    return response
  }

  // 根据业务状态码处理不同情况
  switch (data.code) {
    case 200:
      // 请求成功
      return data
    case 401:
      // 登录过期处理
      const res = await modal({ content: '登录已过期，请重新登录' })
      if (res) {
        clearStorage()
        wx.navigateTo({
          url: '/pages/login/index'
        })
      }
      return Promise.reject(response)
    default:
      // 其他错误情况处理
      toast({
        title: '程序出现异常，请联系管理员'
      })
      return Promise.reject(response)
  }
}

// 导出请求实例供其他模块使用
export default request
